<?php
/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */

class ConstructorPropertyPromotion1a {
public function __construct(   private  int  $field1, private    ?string    $field2,public    int|  string    $field3,    protected $field4  ) {
}
}

class ConstructorPropertyPromotion1b {
    public function __construct(
 private   int $field1,
 private    ?string $field2,
 public int   |string    $field3,
 protected    $field4
 ) {
    }
}

class ConstructorPropertyPromotion2a {
public function __construct(   private int $field1   =   1, private  ?string $field2= null,public int|string   $field3= 2,protected $field4   =   "default value"  , )  {
}
}

class ConstructorPropertyPromotion2b {
    public function __construct(
 private    int $field1=1,
 private ?string   $field2 = null,
 public int| string   $field3= 2,
 protected    $field4 =  "default value"   ,
    ) {
    }
}

class ConstructorPropertyPromotion3a {
    public function __construct($param1  , private int $field1   , private ?string    $field2 = "default value", string| int  $param2  = "default value" ) {
    }
}

class ConstructorPropertyPromotion3b {
    public function __construct(
     $param1,
     private    int $field1  ,
     private   ?string    $field2= "default value",
     string|int    $param2 ="default value"
    ) {
    }
}

class ConstructorPropertyPromotion4a {
public function __construct(   private int $field1  , mixed    $param1 =   "default value", private   ?string   $field2 ="default value",) {
}
}

class ConstructorPropertyPromotion4b {
public function __construct(
private int   $field1,
mixed $param1   =   "default value",
private    ?string    $field2 = "default value",
) {
}
}
